#include <head.h>

/*
    1、需要通过 F_GETFL 获取原有的状态 给 flags
    2、将 flags 或上 O_NONBLOCK (非阻塞状态) 
    3、然后通过 F_SETFL 写入你想要的flags
*/
int main(int argc, char const *argv[])
{
    int fifo_fd_1 = open("fifo_1" , O_RDONLY | O_CREAT, 0666);
    if(fifo_fd_1 == -1) {ERRLOG("文件打开失败"); return 0;}
    printf("文件1启动成功\n");

    int fifo_fd_2 = open("fifo_2" , O_RDONLY | O_CREAT, 0666);
    if(fifo_fd_2 == -1) {ERRLOG("文件打开失败"); return 0;}
    printf("文件2启动成功\n");

    int fifo_fd_3 = open("fifo_3" , O_RDONLY | O_CREAT, 0666);
    if(fifo_fd_3 == -1) {ERRLOG("文件打开失败"); return 0;}
    printf("文件3启动成功\n");

    //设定非阻塞模式
    int flag;

    //获取状态
    flag = fcntl(fifo_fd_1,F_GETFL);
    //对标志位写入非阻塞
    flag |= O_NONBLOCK;
    //对文件描述符写入非阻塞
    fcntl(fifo_fd_1,F_SETFL,flag);

    //获取状态
    flag = fcntl(fifo_fd_2,F_GETFL);
    //对标志位写入非阻塞
    flag |= O_NONBLOCK;
    //对文件描述符写入非阻塞
    fcntl(fifo_fd_2,F_SETFL,flag);

    //获取状态
    flag = fcntl(fifo_fd_3,F_GETFL);
    //对标志位写入非阻塞
    flag |= O_NONBLOCK;
    //对文件描述符写入非阻塞
    fcntl(fifo_fd_3,F_SETFL,flag);

    char buf[1024];

    int byte = 0;

    int fifo_fds[3] = {fifo_fd_1 , fifo_fd_2 , fifo_fd_3};

    while(1)
    {
        memset(buf , 0 ,sizeof(buf));
        for(int i=0; i<3; i++)
        {
            //读取
            byte = read(fifo_fds[i],buf,sizeof(buf));
            if(byte > 0)
            {
                printf("fifo_%d = %s\n",i+1,buf);
            }
        }
    }

    close(fifo_fd_1);
    close(fifo_fd_2);
    close(fifo_fd_3);
    return 0;
}